/**
 * Copyright  (c) 2009-2013 XLab,  Org. 
 * All  rights  reserved. 
 */
package org.xlab.baseframework.service.api;

import java.util.List;

import org.springframework.transaction.annotation.Transactional;
import org.xlab.baseframework.domain.ISystemUserDomain;
import org.xlab.baseframework.domain.SystemLog;
import org.xlab.baseframework.domain.enumerate.EnumLogLevel;
import org.xlab.baseframework.domain.query.SystemLogQueryObject;
import org.xlab.baseframework.domain.view.SystemLogVO;
import org.xlab.baseframework.exception.SystemLogNotFoundException;
import org.xlab.baseframework.exception.SystemRuntimeException;

/**
 * <p>
 * 系统日志服务接口
 * </p>
 * 
 * @author MaKuBEX Email:makubexnet@gmail.com
 * @version 1.0.0 Sep 7, 2010
 * @since 1.0.0
 * 
 */
public interface ISystemLogService extends IBaseService<SystemLogVO, SystemLog> {
	/**
	 * <p>
	 * 创建一个普通系统日志
	 * </p>
	 * 
	 * @param title
	 *            日志标题
	 * @param content
	 *            日志内容
	 * @param logLevel
	 *            日志级别
	 * @param createdBy
	 *            创建人
	 */
	@Transactional
	public void createSystemLog(String title, String content,
			EnumLogLevel logLevel, ISystemUserDomain createdBy);

	/**
	 * <p>
	 * 创建一个异常系统日志
	 * </p>
	 * 
	 * @param ex
	 *            系统运行时异常
	 * @param logLevel
	 *            异常日志级别
	 * @param createdBy
	 *            创建人
	 */
	@Transactional
	public void createSystemLog(SystemRuntimeException ex,
			EnumLogLevel logLevel, ISystemUserDomain createdBy);

	/**
	 * <p>
	 * 删除一个系统日志
	 * </p>
	 * 
	 * @param sysLog
	 *            系统日志实体
	 */
	@Transactional
	public void deleteSystemLog(SystemLog sysLog);

	/**
	 * <p>
	 * 根据一个日志查询条件对象查找日志实体列表
	 * </p>
	 * 
	 * @param queryObject
	 *            查询条件
	 * @return 系统日志实体列表
	 * @throws SystemLogNotFoundException
	 *             如果没有找到任何系统日志
	 */
	public List<SystemLog> findAllByQueryObject(SystemLogQueryObject queryObject)
			throws SystemLogNotFoundException;

}
